	
// BrugerSession.h : Declaration of the CBrugerSession

#ifndef __BRUGERSESSION_H_
#define __BRUGERSESSION_H_

#include "resource.h"       // main symbols

/////////////////////////////////////////////////////////////////////////////
// CBrugerSession
class ATL_NO_VTABLE CBrugerSession : 
	public CComObjectRootEx<CComMultiThreadModel>,
	public CComCoClass<CBrugerSession, &CLSID_BrugerSession>,
	public ISupportErrorInfo,
	public IDispatchImpl<IBrugerSession, &IID_IBrugerSession, &LIBID_EBASDLLLib>
{
public:
	CBrugerSession()
	{
		m_pUnkMarshaler = NULL;
		m_pCurrStud = NULL;
		m_pUnknown = NULL;
	}
	virtual ~CBrugerSession()
	{
		m_pCurrStud = NULL;
		m_pUnknown = NULL;
	}

DECLARE_REGISTRY_RESOURCEID(IDR_BRUGERSESSION)
DECLARE_GET_CONTROLLING_UNKNOWN()

DECLARE_PROTECT_FINAL_CONSTRUCT()

BEGIN_COM_MAP(CBrugerSession)
	COM_INTERFACE_ENTRY(IBrugerSession)
	COM_INTERFACE_ENTRY(IDispatch)
	COM_INTERFACE_ENTRY(ISupportErrorInfo)
	COM_INTERFACE_ENTRY_AGGREGATE(IID_IMarshal, m_pUnkMarshaler.p)
END_COM_MAP()

	HRESULT FinalConstruct()
	{
		return CoCreateFreeThreadedMarshaler(
			GetControllingUnknown(), &m_pUnkMarshaler.p);
	}

	void FinalRelease()
	{
		m_pUnkMarshaler.Release();
	}

	CComPtr<IUnknown> m_pUnkMarshaler;

// ISupportsErrorInfo
	STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);

	void SetBrugerInfo(bstr_t brugernavn, bstr_t adgangskode)
	{
		m_brugernavn = brugernavn; 
		m_adgangskode = adgangskode;	
	}
	void SetSessionInfo(bstr_t session)
	{
		m_session = session; 
	}

// IBrugerSession
public:
	STDMETHOD(OpretStatus)(/*[out,retval]*/ IStatus ** ppStatus);
	STDMETHOD(OpretKarakter)(/*[out,retval]*/ IKarakter ** ppKarakter);
	STDMETHOD(OpretKarakterSkala)(/*[out,retval]*/ IKarakterSkala ** ppKarakterSkala);
	STDMETHOD(OpretBogpakke)(/*[out,retval]*/ IBogpakke ** ppBogpakke);
	STDMETHOD(OpretBog)(/*[out,retval]*/ IBog ** ppBog);
	STDMETHOD(OpretFag)(IFag ** ppVal);
	STDMETHOD(get_PlaceHolder)(/*[out, retval]*/ IUnknown * *pVal);
	STDMETHOD(put_PlaceHolder)(/*[in]*/ IUnknown * newVal);
	STDMETHOD(get_AktivStuderende)(/*[out, retval]*/ IStuderende * *pVal);
	STDMETHOD(put_AktivStuderende)(/*[in]*/ IStuderende * newVal);
	STDMETHOD(OpretGruppe)(IGruppe ** ppVal);
	STDMETHOD(OpretStuderende)(/*[out]*/ IStuderende ** ppVal);
	STDMETHOD(get_Brugernavn)(/*[out, retval]*/ BSTR *pVal);
	STDMETHOD(get_Navn)(/*[out, retval]*/ BSTR *pVal);
	STDMETHOD(NyAdgangskode)(/*[in]*/BSTR gammel, /*[in]*/BSTR ny, /*[in]*/ BSTR nyIgen);
private:
	bstr_t m_brugernavn, m_adgangskode, m_navn;
	bstr_t m_session;

	IStuderende * m_pCurrStud;
	IUnknown * m_pUnknown;
};

#endif //__BRUGERSESSION_H_
